package tp.disenio.client;

import java.util.ArrayList;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.PushButton;
import tp.disenio.client.ResultadoDTO;
import tp.disenio.client.CompetenciaDTO;

public class GestionarResultado extends Composite {
	
	private Button btnHome;
	private Button btnResultadosBsqueda;
	private PushButton pshbtnModificar;
	private PushButton pshbtnDarDeBaja;
	private PushButton pshbtnFixture;
	private PushButton pshbtnParticipantes;
	private PushButton pshbtnTablaDePosiciones;
	private PushButton pshbtnGenerarFixture;
	private PushButton pshbtnPrimerSet;
	private PushButton pshbtnAnteriorSet;
	private PushButton pshbtnSiguienteSet;
	private PushButton pshbtnUltimoSet;
	private TextBox txtBxNombre;
	private TextBox txtBxModalidad;
	private TextBox txtBxDeporte;
	private TextBox txtBxEstado;
	private TextBox txtBxPtsLocal;
	private TextBox txtBxPtsVisitante;
	private ArrayList<TextBox> listaTextBoxSetsLocal = new ArrayList<TextBox>();
	private ArrayList<TextBox> listaTextBoxSetsVisitante = new ArrayList<TextBox>();
	private Label lblSetCompuesto;
	private Label lblUsuario;
	private Label lblSalir;
	private Label lblNombreLocal;
	private Label lblNombreVisitante;
	private Label lblNombreLocalSets;
	private Label lblNombreVisitanteSets;
	private Label lblVS;
	private Label lbltipoPuntuacion;
	private Label lblNoSePresento;
	private Label lblEmpate;
	private Label lblNoSePresentoSets;
	private CompetenciaDTO competencia;
	private ArrayList<ResultadoDTO> listadoFecha;
	private ResultadoDTO resultado;
	private CheckBox checkBoxLocal;
	private CheckBox checkBoxVisitante;
	private CheckBox checkBoxLocalResultadoFinal;
	private CheckBox checkBoxVisitanteResultadoFinal;
	private CheckBox checkBoxEmpate;
	private CheckBox checkBoxLocalSets;
	private CheckBox checkBoxVisitanteSets;
	private PushButton pshbtnAceptarPuntuacion;
	private PushButton pshbtnAceptarResultadoFinal;
	private PushButton pshbtnAceptarSets;
	private PushButton pshbtnCancelar;
	private int cantidadDeSets;
	private int fechaNumero;



	public GestionarResultado(String user,CompetenciaDTO competencia,ResultadoDTO resultado,int fechaNumero) {
		
		final RootPanel rootPanel = RootPanel.get("nameFieldContainer");
		
		AbsolutePanel absolutePanel = new AbsolutePanel();
		initWidget(absolutePanel);
		absolutePanel.setSize("1024px", "576px");
		
		setCompetencia(competencia);		
		setResultado(resultado);
		setFechaNumero(fechaNumero);
		
		
		// WIDGETS 
				
		btnHome = new Button("Home");
		absolutePanel.add(btnHome, 100, 100);
		
		btnResultadosBsqueda = new Button("Volver a B\u00FAsqueda");
		absolutePanel.add(btnResultadosBsqueda, 160, 100);
	
		pshbtnModificar = new PushButton("Modificar");
		absolutePanel.add(pshbtnModificar, 759, 195);
		pshbtnModificar.setSize("131px", "18px");
		
		pshbtnDarDeBaja = new PushButton("Dar de Baja");
		absolutePanel.add(pshbtnDarDeBaja, 759, 225);
		pshbtnDarDeBaja.setSize("131px", "18px");
		
		pshbtnFixture = new PushButton("Fixture");
		absolutePanel.add(pshbtnFixture, 759, 255);
		pshbtnFixture.setSize("131px", "18px");
		
		pshbtnParticipantes = new PushButton("Participantes");
		absolutePanel.add(pshbtnParticipantes, 759, 285);
		pshbtnParticipantes.setSize("131px", "18px");
		
		pshbtnTablaDePosiciones = new PushButton("Tabla de Posiciones");
		absolutePanel.add(pshbtnTablaDePosiciones, 759, 315);
		pshbtnTablaDePosiciones.setSize("131px", "18px");
		
		pshbtnGenerarFixture = new PushButton("Generar Fixture");
		absolutePanel.add(pshbtnGenerarFixture, 759, 345);
		pshbtnGenerarFixture.setSize("131px", "18px");
		
		
		txtBxNombre = new TextBox();
		absolutePanel.add(txtBxNombre, 150, 210);
		txtBxNombre.setSize("135px", "15px");
		
		txtBxModalidad = new TextBox();
		absolutePanel.add(txtBxModalidad, 300, 210);
		txtBxModalidad.setSize("135px", "15px");
		
		txtBxDeporte = new TextBox();
		absolutePanel.add(txtBxDeporte, 450, 210);
		txtBxDeporte.setSize("135px", "15px");
		
		txtBxEstado = new TextBox();
		absolutePanel.add(txtBxEstado, 600, 210);
		txtBxEstado.setSize("135px", "15px");
		
		
		cargarDatosCompetencia();
	
		// LABELS 
		
		lblUsuario = new Label("");
		lblUsuario.setText(user);
		lblUsuario.setStyleName("usuarioLabel");
		absolutePanel.add(lblUsuario, 820, 95);
		
		lblSalir = new Label("Salir");
		lblSalir.setStyleName("usuarioLabel");
		absolutePanel.add(lblSalir, 780, 95);
		
		Label lblInformacionDeLa = new Label("INFORMACION DE LA COMPETENCIA");
		lblInformacionDeLa.setStyleName("subTituloInformacionCompetencia");
		absolutePanel.add(lblInformacionDeLa, 275, 140);
		

		lblInformacionDeLa.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
								
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new VerCompetenciaUA(getLblUsuario().getText(),getCompetenciaDTO()),100,50);
				
			}
		});

		
		Label lblNombre = new Label("Nombre ");
		lblNombre.setStyleName("label");
		absolutePanel.add(lblNombre, 200, 190);
		
		Label lblModalidad = new Label("Modalidad");
		lblModalidad.setStyleName("label");
		absolutePanel.add(lblModalidad, 340, 190);
		lblModalidad.setSize("45px", "18px");
		
		Label lblDeporte = new Label("Deporte");
		lblDeporte.setStyleName("label");
		absolutePanel.add(lblDeporte, 500, 190);
		lblDeporte.setSize("45px", "18px");
		
		Label lblEstado = new Label("Estado");
		lblEstado.setStyleName("label");
		absolutePanel.add(lblEstado, 650, 190);
		
		
				
				//HANDLERS
					
		getLblUsuario().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
				Window.alert("Modficar Datos Usuario ");
				
			}
		});
				
		
		
		lbltipoPuntuacion = new Label();
		lbltipoPuntuacion.setStyleName("subTitulo");
		absolutePanel.add(lbltipoPuntuacion,310,260);
	
		checkBoxLocal = new CheckBox();
		checkBoxLocal.setSize("150px", "150px");
		absolutePanel.add(checkBoxLocal,340,390);
		
		lblNoSePresento = new Label("No se presento");
		lblNoSePresento.setStyleName("usuarioLabel");
		absolutePanel.add(lblNoSePresento,400,390);
		
		checkBoxVisitante = new CheckBox();
		absolutePanel.add(checkBoxVisitante,520,390);
		
		
		for(int i=0;i<9;i++){
			
			listaTextBoxSetsLocal.add(new TextBox());
			listaTextBoxSetsVisitante.add(new TextBox());
			
		}
		
			// PUNTUACION
		
		lblNombreLocal = new Label();
		lblNombreLocal.setStyleName("usuarioLabel");
		absolutePanel.add(lblNombreLocal,280,340);
		
		lblNombreVisitante = new Label();
		lblNombreVisitante.setStyleName("usuarioLabel");
		absolutePanel.add(lblNombreVisitante,535,340);

		lblVS = new Label("VS");
		lblVS.setStyleName("usuarioLabel");
		absolutePanel.add(lblVS,435,340);
				
		lblNombreLocal.setText(getResultado().getNombreLocal());
		lblNombreVisitante.setText(getResultado().getNombreVisitante());
		
		txtBxPtsLocal = new TextBox();
		absolutePanel.add(txtBxPtsLocal,375,340);
		txtBxPtsLocal.setSize("40px", "15px");	
		
		txtBxPtsVisitante = new TextBox();
		absolutePanel.add(txtBxPtsVisitante,465,340);
		txtBxPtsVisitante.setSize("40px", "15px");	
		
		pshbtnAceptarPuntuacion = new PushButton("Aceptar");
		absolutePanel.add(pshbtnAceptarPuntuacion, 660,320);
		
		pshbtnCancelar = new PushButton("Cancelar");
		absolutePanel.add(pshbtnCancelar, 655,355);	
		
		pshbtnAceptarResultadoFinal = new PushButton("Aceptar");
		absolutePanel.add(pshbtnAceptarResultadoFinal, 660,320);
		
		pshbtnAceptarSets = new PushButton("Aceptar");
		absolutePanel.add(pshbtnAceptarSets, 660,320);

		getPshbtnCancelar().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new FixtureUA(getLblUsuario().getText(),getCompetenciaDTO(),getFechaNumero()),100,50);
				
			}
		});
		
		getPshbtnAceptarPuntuacion().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				final GeneralServiceAsync cargarResultado = GWT.create(GeneralService.class);
				
				AsyncCallback<String> callback = new AsyncCallback<String>() {
					 
				     public void onFailure(Throwable caught) {
		
				    	 Window.alert(caught.getMessage());
				    	 
				    }

					@Override
					public void onSuccess(String result) {
						 				
							Window.alert(result);
							rootPanel.remove(rootPanel.getWidget(1));
							rootPanel.add(new FixtureUA(getLblUsuario().getText(),getCompetenciaDTO(),getFechaNumero()),100,50);
											
						}
				  };
				
				  
				boolean bandera = false;
				
				try{
					
					validarDatosPuntuacion();						
							
					if(!(getCheckBoxLocal().getValue() || getCheckBoxVisitante().getValue())){
						
						getResultado().setResultadoLocal(getNumero(getTxtBxPtsLocal().getText(),1)+"");
						getResultado().setResultadoVisitante(getNumero(getTxtBxPtsVisitante().getText(),1)+"");
						
					}
					
					
					if(getCheckBoxLocal().getValue()){
						getResultado().setResultadoLocal("No se presento");
					}
					else if(getCheckBoxVisitante().getValue()){
						getResultado().setResultadoVisitante("No se presento");
					}
									
					bandera = true;
					
				}
				catch(Exception caught){
					
					Window.alert(caught.getMessage());
					
				}
				
							
				if(bandera){
				
				cargarResultado.cargarResultado(getCompetenciaDTO(), getResultado(), callback);
				}
			}
		});
		
		
		getPshbtnAceptarResultadoFinal().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
					
				final GeneralServiceAsync cargarResultadoFinal = GWT.create(GeneralService.class);
				
				AsyncCallback<String> callback = new AsyncCallback<String>() {
					 
				     public void onFailure(Throwable caught) {
				
				    	 Window.alert(caught.getMessage());
				    	 
				    }

					@Override
					public void onSuccess(String result) {
						 				
							Window.alert(result);
							rootPanel.remove(rootPanel.getWidget(1));
							rootPanel.add(new FixtureUA(getLblUsuario().getText(),getCompetenciaDTO(),getFechaNumero()),100,50);
											
						}
				  };
					
	  
				  if(getCheckBoxLocalResultadoFinal().getValue() || getCheckBoxVisitante().getValue()){
					  getResultado().setResultadoFinal("Local");
				  }
				  else if(getCheckBoxVisitanteResultadoFinal().getValue() || getCheckBoxLocal().getValue()){
					  getResultado().setResultadoFinal("Visitante");
				  }
				  else if(getCheckBoxEmpate().getValue()){
					  getResultado().setResultadoFinal("Empate");
				  }
				  cargarResultadoFinal.cargarResultado(getCompetenciaDTO(), getResultado(), callback);
				
			}
		});
		
		
		getPshbtnAceptarSets().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				final GeneralServiceAsync cargarResultadoSets = GWT.create(GeneralService.class);
				
				AsyncCallback<String> callback = new AsyncCallback<String>() {
					 
				     public void onFailure(Throwable caught) {
		
				    	 Window.alert(caught.getMessage());
				    	 
				    }

					@Override
					public void onSuccess(String result) {
						 				
							Window.alert(result);
							rootPanel.remove(rootPanel.getWidget(1));
							rootPanel.add(new FixtureUA(getLblUsuario().getText(),getCompetenciaDTO(),getFechaNumero()),100,50);
											
						}
				  };
					
				  try{
					  validarDatosSets();
					  
					  if(getCheckBoxLocalSets().getValue()){
						  getResultado().setResultadoFinal("Local");
					  }
					  else if(getCheckBoxVisitanteSets().getValue()){
						  getResultado().setResultadoFinal("Visitante");
					  }
					  else{
						  getResultado().setResultadoFinal("Calcular");
					  }
					  
					  cargarListadoResultados(getResultado());
					  
					  cargarResultadoSets.cargarResultado(getCompetenciaDTO(), getResultado(), callback);
					  
				  }
				  catch(Exception e){
					  
					  Window.alert(e.getMessage());
				  }
	  
				  			  
				 
				
			}
		});
		
		// RESULTADO FINAL
		
		checkBoxLocalResultadoFinal = new CheckBox();
		absolutePanel.add(checkBoxLocalResultadoFinal,370,340);
		
		checkBoxVisitanteResultadoFinal = new CheckBox();
		absolutePanel.add(checkBoxVisitanteResultadoFinal,480,340);
		
		lblEmpate = new Label("Empate");
		lblEmpate.setStyleName("usuarioLabel");
		absolutePanel.add(lblEmpate,405,435);
		
		checkBoxEmpate = new CheckBox();
		absolutePanel.add(checkBoxEmpate,460,435);
		
		
		getCheckBoxLocal().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
					if(getCheckBoxLocal().getValue()){
						getCheckBoxVisitante().setValue(false);
					}
			}
		});
		
		getCheckBoxVisitante().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
					if(getCheckBoxVisitante().getValue()){
						getCheckBoxLocal().setValue(false);
					}
			}
		});
		
		getCheckBoxVisitanteResultadoFinal().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				getCheckBoxLocalResultadoFinal().setValue(!getCheckBoxVisitanteResultadoFinal().getValue());
				if(getCheckBoxVisitanteResultadoFinal().getValue()){
						getCheckBoxEmpate().setValue(false);
				
						if(getCheckBoxVisitante().getValue()){
						
							getCheckBoxVisitante().setValue(false);
						}
					
				}
				
			}
		});
		
		getCheckBoxLocalResultadoFinal().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				getCheckBoxVisitanteResultadoFinal().setValue(!getCheckBoxLocalResultadoFinal().getValue());
				if(getCheckBoxLocalResultadoFinal().getValue()){
					
					getCheckBoxEmpate().setValue(false);
					
					if(getCheckBoxLocal().getValue()){
									
						getCheckBoxLocal().setValue(false);
					}
				}
			}
		});
		
		getCheckBoxLocal().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				if(getCheckBoxLocal().getValue()){
					
					getCheckBoxLocalResultadoFinal().setValue(false);
					getCheckBoxEmpate().setValue(false);
				}
				
			}
		});
		
		
		
		getCheckBoxVisitante().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {

				if(getCheckBoxVisitante().getValue()){
					
					getCheckBoxVisitanteResultadoFinal().setValue(false);
					getCheckBoxEmpate().setValue(false);
				}
				
			}
		});
		
		getCheckBoxEmpate().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				if(getCheckBoxEmpate().getValue()){
					
					getCheckBoxLocalResultadoFinal().setValue(false);
					getCheckBoxVisitanteResultadoFinal().setValue(false);
					getCheckBoxLocal().setValue(false);
					getCheckBoxVisitante().setValue(false);
					
				}
				
			}
		});
		
		
		// SETS
		
		pshbtnPrimerSet = new PushButton("<<");
		pshbtnAnteriorSet = new PushButton("<");
		pshbtnSiguienteSet = new PushButton(">");
		pshbtnUltimoSet = new PushButton(">>");
		
		absolutePanel.add(pshbtnPrimerSet,350,300);
		absolutePanel.add(pshbtnAnteriorSet,380,300);
		absolutePanel.add(pshbtnSiguienteSet,500,300);
		absolutePanel.add(pshbtnUltimoSet,522,300);
		
		
		
		setCantidadDeSets(3);
		
		pshbtnPrimerSet.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				actualizarSetCompuesto(1);
				
			}
		});
		
		
		pshbtnAnteriorSet.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {

				if(getNumeroSet()>1){
					actualizarSetCompuesto(getNumeroSet()-1);
				}
				
				
			}
		});
		
		
		pshbtnSiguienteSet.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				if(getNumeroSet()<getCantidadDeSets()){
					actualizarSetCompuesto(getNumeroSet()+1);
				}
				
			}
		});
		
		pshbtnUltimoSet.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				actualizarSetCompuesto(getCantidadDeSets());
				
			}
		});
		
				
		lblNoSePresentoSets = new Label("No se presento");
		lblNoSePresentoSets.setStyleName("usuarioLabel");
		absolutePanel.add(lblNoSePresentoSets,200,300);
		
		checkBoxLocalSets = new CheckBox();
		absolutePanel.add(checkBoxLocalSets,200,340);
		
		checkBoxVisitanteSets = new CheckBox();
		absolutePanel.add(checkBoxVisitanteSets,200,380);
		
		lblNombreLocalSets = new Label(getResultado().getNombreLocal());
		lblNombreLocalSets.setStyleName("usuarioLabel");
		absolutePanel.add(lblNombreLocalSets,250,340);
		
		lblNombreVisitanteSets = new Label(getResultado().getNombreVisitante());
		lblNombreVisitanteSets.setStyleName("usuarioLabel");
		absolutePanel.add(lblNombreVisitanteSets,250,380);
	
		lblSetCompuesto = new Label("Set: 1");
		lblSetCompuesto.setStyleName("usuarioLabel");
		absolutePanel.add(lblSetCompuesto,430,300);
		
		
		for(int k=0; k<9;k++){
		listaTextBoxSetsLocal.get(k).setSize("20px", "20px");
		absolutePanel.add(listaTextBoxSetsLocal.get(k),430,340);
		listaTextBoxSetsVisitante.get(k).setSize("20px", "20px");
		absolutePanel.add(listaTextBoxSetsVisitante.get(k),430,380);
		}
				
				
		getLblSalir().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new Ingreso(),(Window.getClientWidth()/3),150);
				Window.alert("Usted se ha deslogeado");
				
			}
		});
		 getBtnHome().addClickHandler(new ClickHandler() {
				
				@Override
				public void onClick(ClickEvent event) {
					
					rootPanel.remove(rootPanel.getWidget(1));
					rootPanel.add(new HomeUA(getLblUsuario().getText()),100,50);
				   
				}
			});
		 
		 getBtnResultadosBsqueda().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new ListarCompetenciasDeportivasUA(getLblUsuario().getText()),100,45);

				
			}
		});
		
		
		getCheckBoxLocalSets().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
				if(getCheckBoxLocalSets().getValue()){
					getCheckBoxVisitanteSets().setValue(false);
				}
				
			}
		});
		
		getCheckBoxVisitanteSets().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
				if(getCheckBoxVisitanteSets().getValue()){
					getCheckBoxLocalSets().setValue(false);
				}
				
			}
		});
		 
		getPshbtnParticipantes().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new ListarParticipantes(getLblUsuario().getText(),getCompetenciaDTO()),100,50);
				
			}
		});
		 
		
		getPshbtnTablaDePosiciones().addClickHandler(new ClickHandler(
				) {
			
			@Override
			public void onClick(ClickEvent event) {
				
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new TablaDePosicionesUA(getLblUsuario().getText(),getCompetenciaDTO()),100,50);
				
			}
		});
		
		
		getPshbtnGenerarFixture().addClickHandler(new ClickHandler() {
			
			final GenerarFixtureServiceAsync generarFixture = GWT.create(GenerarFixtureService.class);
			
			@Override
			public void onClick(ClickEvent event) {
				 
				AsyncCallback<String> callback = new AsyncCallback<String>() {
					 
				     public void onFailure(Throwable caught) {
				 
				    	 Window.alert(caught.getMessage());
				    }

					@Override
					public void onSuccess(String result) {
									
						Window.alert((String)result);
					
					}
				  };
				  
				  generarFixture.generarFixture(getCompetenciaDTO(), callback);
		
			}
		});
	
		getLblNombreLocal().setVisible(false);
		getTxtBxPtsLocal().setVisible(false);
		getLblVS().setVisible(false);
		getTxtBxPtsVisitante().setVisible(false);
		getLblNombreVisitante().setVisible(false);
		getCheckBoxEmpate().setVisible(false);
		getCheckBoxLocal().setVisible(false);
		getCheckBoxVisitante().setVisible(false);
		getCheckBoxLocalResultadoFinal().setVisible(false);
		getCheckBoxVisitanteResultadoFinal().setVisible(false);
		getLblEmpate().setVisible(false);
		getLblNoSePresento().setVisible(false);
		getLblNoSePresentoSets().setVisible(false);
		getCheckBoxLocalSets().setVisible(false);
		getCheckBoxVisitanteSets().setVisible(false);
		getLblSetCompuesto().setVisible(false);
		getPshbtnPrimerSet().setVisible(false);
		getPshbtnAnteriorSet().setVisible(false);
		getPshbtnSiguienteSet().setVisible(false);
		getPshbtnUltimoSet().setVisible(false);
		getLblNombreLocalSets().setVisible(false);
		getLblNombreVisitanteSets().setVisible(false);
		getPshbtnAceptarPuntuacion().setVisible(false);
		getPshbtnAceptarResultadoFinal().setVisible(false);
		getPshbtnAceptarSets().setVisible(false);
		getPshbtnCancelar().setVisible(false);
	
		
		for(int k=0; k<9;k++){
			listaTextBoxSetsLocal.get(k).setVisible(false);
			listaTextBoxSetsVisitante.get(k).setVisible(false);
			
		}
	
		//INICIANDO
		
		final GeneralServiceAsync generalService = GWT.create(GeneralService.class);
					 
				AsyncCallback<String> callbackGeneral = new AsyncCallback<String>() {
					 
					@Override
					public void onSuccess(String result) {
											
						if(result.equals("Resultado Final")){
							
							gestionarResultadoResultadoFinal();
						}
						
						else if(result.equals("Puntuacion")){
							
							gestionarResultadoPuntuacion();
						}
						
						else if(result.equals("Sets")){
							
							gestionarResultadoSets();
						}
					}
					
					@Override
				     public void onFailure(Throwable caught) {
				      
				    	 Window.alert(caught.getMessage());
				    }

				  };
				  
				 generalService.modalidadCompetencia(getCompetenciaDTO(), callbackGeneral);
				 
	}
	
	
	public void gestionarResultadoResultadoFinal(){
		
		getLbltipoPuntuacion().setText("Tipo Puntuacion: Resultado Final");
		
		getLblNombreLocal().setVisible(true);
		getCheckBoxVisitanteResultadoFinal().setVisible(true);
		getLblVS().setVisible(true);
		getCheckBoxLocalResultadoFinal().setVisible(true);
		getLblNombreVisitante().setVisible(true);
		getPshbtnAceptarResultadoFinal().setVisible(true);
		getPshbtnCancelar().setVisible(true);
		getCheckBoxLocal().setVisible(true);
		getCheckBoxVisitante().setVisible(true);
		getLblNoSePresento().setVisible(true);
		getLblEmpate().setVisible(true);
		getCheckBoxEmpate().setVisible(true);
		
	}
	public void gestionarResultadoPuntuacion(){
		
		getLbltipoPuntuacion().setText("Tipo Puntuacion: Puntuacion");
	
		getLblNombreLocal().setVisible(true);
		getTxtBxPtsLocal().setVisible(true);
		getLblVS().setVisible(true);
		getTxtBxPtsVisitante().setVisible(true);
		getLblNombreVisitante().setVisible(true);
		getPshbtnAceptarPuntuacion().setVisible(true);
		getPshbtnCancelar().setVisible(true);
		getCheckBoxLocal().setVisible(true);
		getCheckBoxVisitante().setVisible(true);
		getLblNoSePresento().setVisible(true);
		
	}
	public void gestionarResultadoSets(){
		
		final GeneralServiceAsync generalService2 = GWT.create(GeneralService.class);
		 
		AsyncCallback<Integer> callbackGeneral2 = new AsyncCallback<Integer>() {
			 
			@Override
			public void onSuccess(Integer result) {
				
				setCantidadDeSets(result);
				
			}
			
			@Override
		     public void onFailure(Throwable caught) {
		     
				Window.alert(caught.getMessage());
		    }

		};
		  
		 generalService2.cantidadDeSets(getCompetenciaDTO(), callbackGeneral2);
				
		getLbltipoPuntuacion().setText("Tipo Puntuacion: Sets");
		
		getLblNoSePresentoSets().setVisible(true);
		getCheckBoxLocalSets().setVisible(true);
		getCheckBoxVisitanteSets().setVisible(true);
		getLblSetCompuesto().setVisible(true);
		getPshbtnPrimerSet().setVisible(true);
		getPshbtnAnteriorSet().setVisible(true);
		getPshbtnSiguienteSet().setVisible(true);
		getPshbtnUltimoSet().setVisible(true);
		getListaTextBoxSetsLocal().get(getNumeroSet()-1).setVisible(true);
		getListaTextBoxSetsVisitante().get(getNumeroSet()-1).setVisible(true);
		getLblNombreLocalSets().setVisible(true);
		getLblNombreVisitanteSets().setVisible(true);
		getPshbtnAceptarSets().setVisible(true);
		getPshbtnCancelar().setVisible(true);
		
	}
	
	public void actualizarSetCompuesto(int set){
				
		getListaTextBoxSetsLocal().get(getNumeroSet()-1).setVisible(false);
		getListaTextBoxSetsVisitante().get(getNumeroSet()-1).setVisible(false);
			getLblSetCompuesto().setText(getLblSetCompuesto().getText().substring(0,5)+set);
		getListaTextBoxSetsLocal().get(getNumeroSet()-1).setVisible(true);
		getListaTextBoxSetsVisitante().get(getNumeroSet()-1).setVisible(true);
				
	}
	
	
	public void cargarDatosCompetencia(){
		
		getTxtBxNombre().setText(getCompetenciaDTO().getNombre());getTxtBxNombre().setReadOnly(true);
		getTxtBxModalidad().setText(getCompetenciaDTO().getModalidad());getTxtBxModalidad().setReadOnly(true);
		getTxtBxDeporte().setText(getCompetenciaDTO().getDeporte());getTxtBxDeporte().setReadOnly(true);
		getTxtBxEstado().setText(getCompetenciaDTO().getEstadodecompetencia());getTxtBxEstado().setReadOnly(true);
		
	}

	
	public void validarDatosPuntuacion()throws IllegalArgumentException{
		
		if(!validarNumero(getTxtBxPtsLocal().getText()) || !validarNumero(getTxtBxPtsVisitante().getText())){
			
			throw new IllegalArgumentException("Los puntajes deben ser solo numeros.");
		}
		if(!(getCheckBoxLocal().getValue() || getCheckBoxVisitante().getValue())
				&& (getTxtBxPtsLocal().getText().equals("") || getTxtBxPtsVisitante().getText().equals(""))){
			
			throw new IllegalArgumentException("Debe ingresar todos los datos");
		}
		else if((getCheckBoxLocal().getValue() || getCheckBoxVisitante().getValue())
				&& (!getTxtBxPtsLocal().getText().equals("") || !getTxtBxPtsVisitante().getText().equals(""))){
			
			throw new IllegalArgumentException("No puede ingresar datos cuando alguno de los participantes no se presento");
			
		}
		else if((getCheckBoxLocal().getValue() || getCheckBoxVisitante().getValue())
				&& (getTxtBxPtsLocal().getText().equals("") && getTxtBxPtsVisitante().getText().equals(""))){
				//Datos Correctos
		}
		else if(getNumero(getTxtBxPtsLocal().getText(),1)<0 
			|| getNumero(getTxtBxPtsVisitante().getText(),1)<0){
			
			throw new IllegalArgumentException("No puede ingresar resultados negativos");
		}	
		
	}
	
	private boolean validarNumero(String numero){
		
		boolean retorno = true;
		
		for(int i=0; i<numero.length();i++){
			
			if(		   numero.charAt(i)!='1'
					&& numero.charAt(i)!='2'
					&& numero.charAt(i)!='3'
					&& numero.charAt(i)!='4'
					&& numero.charAt(i)!='5'
					&& numero.charAt(i)!='6'
					&& numero.charAt(i)!='7'
					&& numero.charAt(i)!='8'
					&& numero.charAt(i)!='9'
					&& numero.charAt(i)!='0'
					){
				retorno = false;
			}
		}
		
		return retorno;
		
	}
	
	public void validarDatosSets()throws IllegalArgumentException{
		
		int i;
		boolean seguir = true;
		
		for(i=0;i<getCantidadDeSets() && seguir;i++){
			if(!(validarNumero(getListaTextBoxSetsLocal().get(i).getText()) && validarNumero(getListaTextBoxSetsVisitante().get(i).getText()))){
				seguir=false;
			}
		}
		
		if(getCheckBoxLocalSets().getValue() || getCheckBoxVisitanteSets().getValue()){
			
			if(!verificarDatosSets().equals("Ningun resultado ingresado")){
				throw new IllegalArgumentException("No puede ingresar datos si un participante no se presento");
			}
			
		}
		else if(!verificarDatosSets().equals("Todos los resultados")){
			
			throw new IllegalArgumentException(verificarDatosSets());
			
		}
		else if(!seguir){
			
			throw new IllegalArgumentException("Ingrese solo numeros");
		}
		else{
			
			for(i=0;i<getCantidadDeSets();i++){
				if(getListaTextBoxSetsLocal().get(i).getText().equals(getListaTextBoxSetsVisitante().get(i).getText())){
					throw new IllegalArgumentException("Los resultados de los sets no pueden ser iguales");
				}
			}
		}
		
			
	}
	
	
	public String verificarDatosSets(){
		
		int decision = 2; 	//2 es Todos los resultados; 1 es Solo algunos resultados ingresados; 0 es Ningun resultaod ingresado 
		boolean haySoloAlgunos = true;
		boolean hayTodos = true;
		
		//Listado de decisiones
		ArrayList<String> decisiones = new ArrayList<String>();
		
			decisiones.add("Ningun resultado ingresado"); 
			decisiones.add("Solo algunos resultados ingresados"); 
			decisiones.add("Todos los resultados");
		
			
		for(int i=0;i<getCantidadDeSets() && haySoloAlgunos;i++){
					
			if(!getListaTextBoxSetsLocal().get(i).getText().equals("") && !getListaTextBoxSetsVisitante().get(i).getText().equals("")){
				
				hayTodos=false; //Si falta alguno de los dos datos
				
			}
			else if(getListaTextBoxSetsLocal().get(i).getText().equals("") && getListaTextBoxSetsVisitante().get(i).getText().equals("") && haySoloAlgunos && hayTodos){
				
				decision = 0; //Si no hay ninguno de los dos datos y en sets anteriores hubo algunos o todos los datos
				
			}
			else if(!hayTodos && getListaTextBoxSetsLocal().get(i).getText().equals("") && getListaTextBoxSetsVisitante().get(i).getText().equals("")){
				
				decision = 1; //Si no hay todos lo datos pero si algunos
				
			}
			else if(	getListaTextBoxSetsLocal().get(i).getText().equals("") && !getListaTextBoxSetsVisitante().get(i).getText().equals("")
					||  !getListaTextBoxSetsLocal().get(i).getText().equals("") && getListaTextBoxSetsVisitante().get(i).getText().equals("")){
				
				//Si no hay todos lo datos pero si algunos
				decision = 1;
				haySoloAlgunos = false;
			}
					
		}
			
		return decisiones.get(decision);
		
	}
	
	public void cargarListadoResultados(ResultadoDTO resultados){
		
		resultados.getSets().clear();
		
		for(int i=0;i<getCantidadDeSets();i++){
			
			SetsDTO setDTONuevo = new SetsDTO(Integer.parseInt(getListaTextBoxSetsLocal().get(i).getText()),Integer.parseInt(getListaTextBoxSetsVisitante().get(i).getText()));
			resultados.getSets().add(setDTONuevo);
			
		}
			
	}
	
	public int getNumero(String secuencia, int posicion){
	
		int numeroRetorno;
		ArrayList<Integer> listaEspacios = new ArrayList<Integer>();
				
		listaEspacios.add(-1);
		
		for(int i=0;i<secuencia.length();i++){
			
			if(secuencia.charAt(i)==' '){
				listaEspacios.add(i);
	
			}
			else if( (i==secuencia.length()-1)){
				listaEspacios.add(i+1);
				
			}
		}
		
		numeroRetorno = Integer.parseInt(secuencia.substring(listaEspacios.get(posicion-1)+1,listaEspacios.get(posicion)));
		return numeroRetorno;
	
	}

	public Label getLblNombreVisitante() {
		return lblNombreVisitante;
	}


	public TextBox getTxtBxPtsLocal() {
		return txtBxPtsLocal;
	}

	
	public TextBox getTxtBxPtsVisitante() {
		return txtBxPtsVisitante;
	}

	
	public void setTxtBxPtsVisitante(TextBox txtBxPtsVisitante) {
		this.txtBxPtsVisitante = txtBxPtsVisitante;
	}


	public PushButton getPshbtnAceptarPuntuacion() {
		return pshbtnAceptarPuntuacion;
	}

	public PushButton getPshbtnAceptarResultadoFinal() {
		return pshbtnAceptarResultadoFinal;
	}


	public PushButton getPshbtnAceptarSets() {
		return pshbtnAceptarSets;
	}

	
	public Label getLblVS() {
		return lblVS;
	}


	public Label getLbltipoPuntuacion() {
		return lbltipoPuntuacion;
	}

	
	public CheckBox getCheckBoxLocal() {
		return checkBoxLocal;
	}

	
	public CheckBox getCheckBoxVisitante() {
		return checkBoxVisitante;
	}


	public CheckBox getCheckBoxEmpate() {
		return checkBoxEmpate;
	}

	public Label getLblNoSePresento() {
		return lblNoSePresento;
	}


	public CheckBox getCheckBoxLocalResultadoFinal() {
		return checkBoxLocalResultadoFinal;
	}


	public CheckBox getCheckBoxVisitanteResultadoFinal() {
		return checkBoxVisitanteResultadoFinal;
	}
	

	public Label getLblEmpate() {
		return lblEmpate;
	}


	public PushButton getPshbtnPrimerSet() {
		return pshbtnPrimerSet;
	}


	public PushButton getPshbtnAnteriorSet() {
		return pshbtnAnteriorSet;
	}


	public PushButton getPshbtnSiguienteSet() {
		return pshbtnSiguienteSet;
	}


	public PushButton getPshbtnUltimoSet() {
		return pshbtnUltimoSet;
	}


	public Label getLblNoSePresentoSets() {
		return lblNoSePresentoSets;
	}


	public CheckBox getCheckBoxLocalSets() {
		return checkBoxLocalSets;
	}


	public CheckBox getCheckBoxVisitanteSets() {
		return checkBoxVisitanteSets;
	}

	
	public Label getLblNombreLocalSets() {
		return lblNombreLocalSets;
	}


	public Label getLblNombreVisitanteSets() {
		return lblNombreVisitanteSets;
	}


	public Label getLblSetCompuesto() {
		return lblSetCompuesto;
	}
	

	public int getCantidadDeSets() {
		return cantidadDeSets;
	}


	public int getFechaNumero() {
		return fechaNumero;
	}


	public void setFechaNumero(int fechaNumero) {
		this.fechaNumero = fechaNumero;
	}


	public void setCantidadDeSets(int cantidadDeSets) {
		this.cantidadDeSets = cantidadDeSets;
	}
	
	public PushButton getPshbtnCancelar() {
		return pshbtnCancelar;
	}
	
	public PushButton getPshbtnParticipantes() {
		return pshbtnParticipantes;
	}


	public PushButton getPshbtnTablaDePosiciones() {
		return pshbtnTablaDePosiciones;
	}


	public PushButton getPshbtnGenerarFixture() {
		return pshbtnGenerarFixture;
	}


	public Label getLblSalir() {
		return lblSalir;
	}


	public CompetenciaDTO getCompetenciaDTO() {
		return competencia;
	}


	public void setCompetencia(CompetenciaDTO competencia) {
		this.competencia = competencia;
	}
	

	public ResultadoDTO getResultado() {
		return resultado;
	}


	public void setResultado(ResultadoDTO resultado) {
		this.resultado = resultado;
	}


	public ArrayList<ResultadoDTO> getListadoFecha() {
		return listadoFecha;
	}


	public void setListadoFecha(ArrayList<ResultadoDTO> listadoFecha) {
		this.listadoFecha = listadoFecha;
	}
	

	public Label getLblNombreLocal() {
		return lblNombreLocal;
	}

	public ArrayList<TextBox> getListaTextBoxSetsLocal() {
		return listaTextBoxSetsLocal;
	}


	public void setListaTextBoxSetsLocal(ArrayList<TextBox> listaTextBoxSetsLocal) {
		this.listaTextBoxSetsLocal = listaTextBoxSetsLocal;
	}


	public ArrayList<TextBox> getListaTextBoxSetsVisitante() {
		return listaTextBoxSetsVisitante;
	}


	public void setListaTextBoxSetsVisitante(ArrayList<TextBox> listaTextBoxSetsVisitante) {
		this.listaTextBoxSetsVisitante = listaTextBoxSetsVisitante;
	}


	public TextBox getTxtBxNombre() {
		return txtBxNombre;
	}


	public void setTxtBxNombre(TextBox txtBxNombre) {
		this.txtBxNombre = txtBxNombre;
	}


	public TextBox getTxtBxModalidad() {
		return txtBxModalidad;
	}


	public void setTxtBxModalidad(TextBox txtBxModalidad) {
		this.txtBxModalidad = txtBxModalidad;
	}


	public TextBox getTxtBxDeporte() {
		return txtBxDeporte;
	}


	public void setTxtBxDeporte(TextBox txtBxDeporte) {
		this.txtBxDeporte = txtBxDeporte;
	}


	public TextBox getTxtBxEstado() {
		return txtBxEstado;
	}


	public void setTxtBxEstado(TextBox txtBxEstado) {
		this.txtBxEstado = txtBxEstado;
	}


	public Label getLblUsuario() {
		return lblUsuario;
	}


	public void setLblUsuario(Label lblUsuario) {
		this.lblUsuario = lblUsuario;
	}


	public Button getBtnHome() {
		return btnHome;
	}


	public Button getBtnResultadosBsqueda() {
		return btnResultadosBsqueda;
	}


	public PushButton getPshbtnModificar() {
		return pshbtnModificar;
	}

	
	public PushButton getPshbtnDarDeBaja() {
		return pshbtnDarDeBaja;
	}


	public PushButton getPshbtnFixture() {
		return pshbtnFixture;
	}

    
	public int getNumeroSet(){
		
		int retorno;
		
		retorno = Integer.parseInt(getLblSetCompuesto().getText().substring(5));
			
		return retorno;
	}
		
}
